class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        //思路：找前0-i-1位置有多少个sum-k加上来
        //   前缀和，出现次数
        unordered_map<int,int> hash;
        hash[0]=1;              //防止第i个刚好和k

        int sum=0,ret=0;        //当前前缀和，记录总个数
        for(auto x:nums)
        {
            sum+=x;                 //前缀和
        
            if(hash.count(sum-k))   //前0-i-1位置有多少个sum-k
                ret+=hash[sum-k];   //统计个数
            
            //把前缀和加入
            hash[sum]++;
        }
        return ret;
    }
};